
// fs node官方自己编写模块,可以对文件读写,重命名,删除
// 使用其他的模块,不需要添加路径,自己编写的js文件,必须添加路径,一般是相对路径
const fs = require('fs');
// 路径名字,[编码格式],回调函数(err,data,字符串)
// ./aa/10.txt,不存在的文件夹和路径,就会报错
fs.readFile('./10.txt', "utf-8", (err, data) => {
  console.log("我是回调");
  console.log(data);
});
// console.log("我是主线程的");

// 路径,回调函数,编码默认是当前文件,给的是数字,字符数组
fs.readFile('./10.txt', (err, data) => {
  console.log("我是回调");
  console.log(data);
});
console.log("我是主线程的");


// synchronous 同步
let data = fs.readFileSync("./log.txt", "utf8");
console.log(data);
console.log(11111);

// 追加的填写 ,文件路径, 追加内容,编码,回调函数
fs.appendFile("./log.txt", "我是追加的", "utf8", (error) => {
  console.log("追加完毕");
})

fs.appendFile("./log.txt", "我是追加的", {encoding:"utf8"}, (error) => {
  console.log("追加完毕");
})



// 没有就会自动创建,有的话就往里边写文件
fs.writeFile('message.txt', "我喜欢上学11111111111", "utf8", (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

fs.writeFile('message.txt', "我喜欢上学11111111111",{encoding:"utf8"}, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

// 没有就会自动的创建文件

let w = fs.createWriteStream("stream.txt");
w.write("我想写文件");
w.write("我想写文件");
w.write("我想写文件");
// \r\n 回车换行
w.write("我想写文件\r\n");
w.write("我想写文件");
// 结束
w.end()


// 默认每次只读64k的字符
// 流对象
let rs = fs.createReadStream("log.txt","utf8");
let dd;

// 因为每次都读64
rs.on("data",(data) => {
  dd+=data.toString();
  console.log(data.toString());
})
// end 表示文件中的数据都读取完毕之后才会执行
rs.on("end",() => {
  console.log(dd);
})


let ws = fs.createWriteStream('./1.txt',{
  flags:'w'//文件的打开模式
  ,mode:0o666//文件的权限设置
  ,encoding:'utf8'//写入文件的字符的编码
  ,highWaterMark:3//最高水位线
  ,start:0 //写入文件的起始索引位置		
  ,autoClose:true//是否自动关闭文档
})

